[レポート]BUILD TOKYO ONLINE:Snowflakeの進化するデータパイプライン構築 -Apache Icebergのパイプライン組み込みやデータエンジニアリング機能のアップデート-

[レポート]BUILD TOKYO ONLINE:Snowflakeの進化するデータパイプライン構築 -Apache Icebergのパイプライン組み込みやデータエンジニアリング機能のアップデート-

Clock Icon2024.12.17

さがらです。

2024年12月17日に、Snowflakeの開発者向けのカンファレンスである「BUILD TOKYO ONLINE」が開催されました。

https://www.snowflake.com/build/build-tokyo-online/

本記事はその中のセッション「Snowflakeの進化するデータパイプライン構築 -Apache Icebergのパイプライン組み込みやデータエンジニアリング機能のアップデート-」のレポート記事となります。

登壇者

Snowflake合同会社
セールスエンジニアリング統括本部
セールスエンジニア
深森 健志郎 氏

アジェンダ

2024-12-17_15h40_55

Apache Iceberg概要

  • Netflixによって開発されて、現在はApache Foundationに寄贈されて開発されている
  • 多様なクエリエンジンに対応
  • ベンダーロックインを避けて信頼性やパフォーマンスの高いものを採用したい、という層が多いため特に注目されている

2024-12-17_15h41_25

  • Snowflakeにおけるテーブル選択肢の1つとして、Icebergテーブルがある
  • Icebergテーブルは、内部テーブル・外部テーブル双方の課題をクリアしたテーブル
  • Icebergはメタデータを保持することで、他のシステムからも参照できる

2024-12-17_15h43_28

  • Apache Icebergの構造
    • カタログを参照して、メタデータが参照する最新のテーブルの状態を確認し、テーブルとして扱うことができる

2024-12-17_15h45_24

  • これまでのIceberg Table

2024-12-17_15h46_40

  • Apache Polaris
    • 今までのカタログは、クエリエンジンとカタログが密に連携していて、クエリエンジンやカタログが固定化されてしまう所があった
    • それを解決するためのツールとして、Snowflakeが旗振り役となって開発したのがApache Polaris

2024-12-17_15h47_16

2024-12-17_15h48_23

  • Polaris Catalog(Apache Polaris)の特徴
    • ロールレベルのアクセス制御で、各クエリエンジンからアクセスできるテーブルを制御できる

2024-12-17_15h48_46

  • Snowflake Open Catalog
    • Apache Polarisのマネージドサービス

2024-12-17_15h49_52

Apache Icebergのデータパイプラインへの組み込み

  • SnowflakeとApache Icebergで出来ること

2024-12-17_15h50_57

  • 効率的なオンボーディング
    • CTASでIcebergテーブルを作ることができる
    • 既存のparquetのデータセットを用いて、Iceberg化することもできる

2024-12-17_15h51_52

  • Apache Icebergテーブルへのデータロード

2024-12-17_15h53_10

  • COPYコマンドでロードする際は、LOAD_MODEオプションで動作を制御可能
  • FULL_INGEST:ファイルを再作成する形式
  • ADD_FILES_COPY:既存のparquetファイルをコピーして、メタデータだけを新規作成する形式
    • 入力のparquetファイルが推奨ファイルに従っている時に特に有効
  • ADD_FILES_REFERENCE ※現在開発中
    • 既存のParquetファイルのコピーも行わずに、メタデータを作成するだけ

2024-12-17_15h54_05

2024-12-17_15h55_01

2024-12-17_15h56_25

  • Snowpipe Streaming
    • すでにIcebergへの対応は一般提供
    • 注意点として、Ingest SDKの設定値を適用することが必要

2024-12-17_15h56_53

  • ダイナミックテーブルのサポート ※現在開発中

2024-12-17_15h58_22

2024-12-17_15h59_04

  • Icebergテーブルのトランスフォーメーションに関するロードマップ

2024-12-17_15h59_47

2024-12-17_16h00_33

デモ

  • Snowflake Open Catalogでカタログを作り、Snowflake内でIcebergテーブルを定義していく。加工時はDynamic Icebergテーブルを用いる
  • データの抽出はSnowpipe Streaming Ingest SDKを用いたアプリケーションで行い、Icebergテーブルにロードしていく
  • 最終的に、Snowflake Open Catalogで作成したロールを用いて、Sparkからアクセスする

2024-12-17_16h01_18

  • Snowflake Open Catalogのアカウントの作成

2024-12-17_16h03_36

  • Snowflake Open Catalogのアカウントで、Connectionsを作成
    • Connectionで使用するロール(Principal Role)として、Spark Analyst Roleを定義

※スクリーンショット撮り漏れました…

  • Snowflake Open Catalogのアカウントで、カタログを作成

2024-12-17_16h04_56

  • Catalog Role
    • 各テーブルへのアクセス権を付与
    • Catalog RoleはPrincipal Roleに付与して利用

2024-12-17_16h05_32

  • ロード前のS3の状態(何もデータが存在しない)

2024-12-17_16h06_10

  • External Volumeの定義
    • S3とつなげる認証情報の定義

2024-12-17_16h06_53

  • Catalog Integrationの定義

2024-12-17_16h07_14

  • Icebergテーブルの作成

2024-12-17_16h07_43

  • ストリーミング対象となるテーブル、Dynamic Icebergテーブルを作成

2024-12-17_16h09_56

2024-12-17_16h10_32

  • ストリーミング開始前に、データをロードして確認(Dynamic Icebergテーブルはまだ空っぽ)

2024-12-17_16h11_14

  • ストリーミングを開始
    • Ingest SDKで提供されるAPIのクラスを用いて、データを抽出してIcebergテーブルにストリーミングしていく
    • Icebergテーブル用の設定値も忘れずに

2024-12-17_16h11_43

2024-12-17_16h12_30

  • ストリーミング開始されたので、データがIcebergテーブルにロードされていく

2024-12-17_16h12_53

  • Iceberg Dynamicテーブルを見ると、加工されたデータが入っていることがわかる

2024-12-17_16h13_55

2024-12-17_16h14_15

  • S3を見ると、parquetファイルが追加され、メタデータも追加されている

2024-12-17_16h14_55

2024-12-17_16h15_07

  • テーブルとしてもちゃんと認識されている

2024-12-17_16h15_36

  • Sparkから、Icebergテーブルにアクセス

2024-12-17_16h16_11

2024-12-17_16h16_35

  • アクセス権が付与されていないnamespaceへのクエリは、エラーとなる

2024-12-17_16h17_35

※エラーのスクリーンショット撮り漏れました…

  • アクセス権がある場合は、Sparkからクエリできる

2024-12-17_16h18_23

  • おまけ:Dynamicテーブルを作成すると、どのテーブルから作られているかのリネージ、更新処理の実行履歴も確認可能

2024-12-17_16h19_04

2024-12-17_16h19_16

その他のデータエンジニアリング機能アップデート

  • サーバレスタスクフレックス
    • 実行完了までの時間枠の幅をもたせ、コストを最適化出来る機能

2024-12-17_16h19_56

  • Snowflake Pandas API
    • 利用者が多いPandasと同じような記法でコードを書き、実行時はSnowflakeのSQLにプッシュダウンされる

2024-12-17_16h20_57

2024-12-17_16h22_15

まとめ

  • IcebergをSnowflakeのデータパイプラインでどのように使えるかを説明してきた
  • 本セッションをきっかけにIcebergを使うきっかけとなると嬉しい

2024-12-17_16h23_01

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.